<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
namespace org\copperforest\oak\im;

class IMActualizationPolicyMessage extends IMAbstractMessage
{

    private $policy;
    private $idResource = null;

    function __construct( $policy, $id = null )
    {
        $this->policy = Deployment::$POLICIES_IDS[ $policy ];
        $this->callback = 'ajax_actualize_nodes';

        if ( !empty( $id ) ) $this->idResource = Node::_transID( $id );
    }

    function accept( $subject )
    {
        //aqui etndríamos que ver que tiepo de actualizacion tenemos pensada,
        //por ahora y enprincipio commo no diponemos de los resources en los nodos
        //de hecho podrían tener varios resources (en ese caso el resource que definieramos  también tendría que ser un array
        $acceptables = array( );
        foreach ( $subject as $s ) {
            $coincidencias = array( );

            if ( preg_match( '/^_(\d+)~(.+)$/', $s, $coincidencias ) ) {
                //$coincidencias[1] es la politica

                if ( $coincidencias[ 1 ] == $this->policy ) {
                    if ( $this->idResource == null ) return true;

                    else if ( $coincidencias[ 2 ] == $this->idResource )
                            return true;
                }
            }
        }

        return false;
        //pero por ahora solo tenemos la politica y el id
        //tendrían que estar todos los nodes que aqui defina
    }

    function __toString()
    {
        return 'p' . $this->policy . 'i' . (($this->idResource != null) ? $this->idResource : '');
    }

    static function subscribe( $node = null )
    {
        echo 'ajax_register_node(\'' . $node->getAsyncId() . '\',\'' . $node->urlEvent() . '&_async=1\')' . ";\n";
    }

}
